package learning.groovy.closure

class CurryingExample {
	//在groovy中，Closure的curry方法返回当前闭包的一个克隆品，这个克隆品已经绑定了一个或者
	//多个给定的参数，参数的绑定是从左向右进行的。
	static main(args){
		def adder = {x,y ->
			println 'x:'+x+',y:'+y
			return x+y
		}
		def addOne = adder.curry(1)
		println addOne(5)
		println addOne(5)==6
		
		println addOne(2)
		
		//Curry最强大的地方是当闭包的参数是闭包本身的时候，这通常在函数式编程时使用到。
		
		//利用闭包和闭包的curry方法，我们完美的解决了最佳的相关性和最低的耦合性的问题。
		//注意每一个闭包实际上都是独立的。
		
		//使用groovy的闭包进行函数式编程
	}
}
